/*
 *  Texture.h
 *  Ray Tracing
 *
 *  Created by Jean-Marc Comby + Romain Dequesne on Tue Jun 08 2004.
 *  Copyright (c) 2004. All rights reserved.
 *
 */
#ifndef _TEXTURE_H
#define _TEXTURE_H

#include "Materiau.hpp"

#include "Image/Image.hpp"

class Forme;

/**
 * Classe implémentant les textures pour le raytracing. Une texture
 * est un fichier d'image qui est placé sur une surface. La manière de
 * déplier (mapper) l'image est propre à chaque forme, c'est pourquoi
 * Texture a un champ Forme.
 *
 * L'image peut être au format jpg ou png uniquement pour l'instant.
 *
 * La classe codée par Jean-Marc Comby + Romain n'héritait pas de
 * Materiau, ce qui la rendait moins facilement intégrable dans le
 * projet. J'ai donc complètement revu la conception de base, mais
 * l'implémentation est globalement inchangée.
 *
 * @todo Permettre d'utiliser un fichier ppm en entrée.
 *
 * @author Johan "Solo" Luisier
 *
 * @date 2010
 */
class Texture : public Materiau
{
 private:
  /**
   * Image que l'on veut appliquer à la surface de l'objet considéré.
   */
  Image aMapper;
  /**
   * Pointeur sur la Forme que l'on veut mapper.
   */
  const Forme * Volume;
  /**
   * Nombre de fois que l'image apparaît sur la surface.
   */
  unsigned int Frequence;
  int Hauteur, /**< Hauteur de l'image. */
    Largeur; /**< Largeur de l'image. */
	
 public:
  Texture(const double& refl, const double& trans,
	  const double& indice, const double& reg,
	  const std::string& name,const Forme *c,
	  const unsigned int& larg);
  Texture(const double& refl, const double& trans,
	  const double& indice, const double& reg, const double& bruit,
	  const std::string&,const Forme *, const unsigned int& larg);
  virtual ~Texture();
  void setVolume(const Forme* obj);
  Couleur couleur(const Coord&);
private:
  const Couleur& mappingObject(const Coord &);
};

#endif
